#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
#include<assert.h>

int main()
{
  pid_t id = fork();

  if(id == 0)
  {
    //child
    int cnt = 5;
    while(cnt)
    {
      printf("我是子进程:%d， 父进程%d，cnt:%d \n", getpid(), getppid(), cnt--);
      sleep(1);
      int a=1/0;
    }
    // 运行完
    // 代码完了，结果正确
    // 代码完了，结果错误
    // 异常
    // 代码没跑完，出异常
   // assert(cnt!=0);
    exit(12); //进程退出
  }
  else if(id >= 0)
  {
    //father
    sleep(20);
    int status = 0; // 不是整体使用的，而是有自己的位图结构
    pid_t ret = waitpid(id, &status, 0);
    if(ret > 0)
    {
      printf("wait success：%d，signal number: %d，child exit code: %d\n", ret, (status & 0x7f ),((status>>8) & 0x7f));
    }
  }

  return 0;
}
